{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <font color=\"#8c8c8c\">基础作业</font>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <font color=\"#8c8c8c\">1. 引入依赖</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "#设置tf日志级别为info\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "xs, ys = mnist.train.next_batch(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 0, 0, 1, 4], dtype=uint8)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ys"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <font color=\"#8c8c8c\">2. 读取mnist数据</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "#获取训练集图片和标签\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "#获取验证集图片和标签\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "#获取测试集图片和标签\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(784,)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mnist.train.images[0].shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### <font color=\"#8c8c8c\">3. 画出训练集中的16张图和标签</font>\n",
    "#### <font color=\"#8c8c8c\">每张图对应的矩阵有784个像素值，这里可以把它转变为28x28的二维矩阵</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")\n",
    "\n",
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### <font color='#8c8c8c'>计算交叉熵损失</font>\n",
    "#### <font color='#8c8c8c'>实例化一个优化函数（梯度下降优化器），基于一定的学习率进行梯度优化训练，以此求出最小损失</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### <font color='#8c8c8c'>用softmax激活函数去激活第二层隐层的前馈计算值（tf.nn.softmax）</font>\n",
    "#### <font color='#8c8c8c'>和ground truth比对，最后计算准确度</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "#使用softmax激活函数进行激活\n",
    "pred = tf.nn.softmax(logits)\n",
    "# tf.argmax(pred, 1)在激活后的矩阵中，找出每行内最大值的索引，并和y中的每个对应元素比较\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "# tf.cast(correct_pred, tf.float32)将correct_pred的元素格式转换成float32\n",
    "# tf.reduce_mean(tf.cast(correct_pred, tf.float32))计算均值，即精确度\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 500 training steps, the loss is 0.236142, the validation accuracy is 0.9342\n",
      "after 1000 training steps, the loss is 0.182629, the validation accuracy is 0.9506\n",
      "after 1500 training steps, the loss is 0.150406, the validation accuracy is 0.9542\n",
      "after 2000 training steps, the loss is 0.078435, the validation accuracy is 0.9672\n",
      "after 2500 training steps, the loss is 0.00367558, the validation accuracy is 0.9696\n",
      "after 3000 training steps, the loss is 0.356943, the validation accuracy is 0.969\n",
      "after 3500 training steps, the loss is 0.0368322, the validation accuracy is 0.9726\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9699\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    # tf.global_variables_initializer()初始化全局变量Op\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "    #训练1000次\n",
    "    for i in range(trainig_step):\n",
    "        #从训练数据中提取batch_size个数据\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        # feed_dict给模型提供数据\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用训练的模型做一个测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-3500\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./basic_test_results')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <font color=\"#8c8c8c\">对模型结构的理解</font>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### <font color='#8c8c8c'>该模型对应的神经网络，共四层，其中有两个隐层、即输入、输出层：</font>\n",
    "\n",
    "#### <font color='#8c8c8c'>输入层</font>\n",
    "有784个维度\n",
    "\n",
    "#### <font color='#8c8c8c'>隐层1</font>\n",
    "有100个神经元\n",
    "使用Relu激活函数\n",
    "#### <font color='#8c8c8c'>隐层2</font>\n",
    "有10个神经元\n",
    "\n",
    "#### <font color='#8c8c8c'>输出层</font>\n",
    "使用softmax激活函数作为最后输出，输出层节点个数取决于分类数目\n",
    "\n",
    "综上，识别手写数字其实是一个分类任务：\n",
    "神经网络结构为：全连接神经网络（含两个隐层）+ softmax"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <font color=\"#8c8c8c\">对模型训练过程（梯度如何计算，参数如何更新）的理解</font>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "该训练模型选取了mnist.train的32张图的数据，训练1000次  \n",
    "\n",
    "在反向传播计算过程中，\n",
    "将每一层的输出与计算交叉熵损失，权重通过梯度下降优化，基于一定的学习率进行梯度优化训练，以此求出最小损失"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <font color=\"#8c8c8c\">对计算图的理解</font>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <font color=\"#8c8c8c\">解释这⾥的模型为什么效果⽐较差</font>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
